home *** CD-ROM | disk | FTP | other *** search
- unit Varargsu;
-
- interface
-
- uses
- SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
- Forms, Dialogs, StdCtrls, ExtCtrls;
-
- type
- TForm1 = class(TForm)
- ErrorGrp: TRadioGroup;
- procedure FormCreate(Sender: TObject);
- procedure ErrorGrpClick(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.DFM}
-
- function Add(const Values: array of const): Double;
- var
- Loop: Byte;
- const
- BoolStrs: array[Boolean] of String[5] = ('False', 'True');
-
- procedure Error(const S: String);
- begin
- raise EInvalidOp.Create('Bogus value ' + S);
- end;
-
- begin
- Result := 0;
- for Loop := Low(Values) to High(Values) do
- with Values[Loop] do
- case VType of
- vtInteger: Result := Result + VInteger;
- vtBoolean: Error(BoolStrs[VBoolean]);
- vtChar:
- if VChar in ['0'..'9'] then
- Result := Result + Ord(VChar) - Ord('0')
- else
- Error('"' + VChar + '"');
- vtExtended: Result := Result + VExtended^;
- vtString:
- try
- Result := Result + StrToFloat(VString^)
- except
- Error('"' + VString^ + '"')
- end;
- vtPointer: Error(Format('%p', [VPointer]));
- vtPChar: Error(StrPas(VPChar));
- vtObject:
- if (VObject is TComponent) and not (VObject is TForm) then
- Error(TComponent(VObject).Name + ': ' + VObject.ClassName)
- else
- Error(VObject.ClassName);
- vtClass: Error(VClass.ClassName);
- end;
- end;
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- MessageDlg(FloatToStr(Add([1, '6.7', 9, 3.6, 9])),
- mtInformation, [mbOk], 0);
- end;
-
- procedure TForm1.ErrorGrpClick(Sender: TObject);
- const
- P: PChar = 'Hello';
- begin
- case ErrorGrp.ItemIndex of
- 0: Caption := FloatToStr(Add([1, 'rrrr']));
- 1: Caption := FloatToStr(Add([1, P]));
- 2: Caption := FloatToStr(Add([1, False]));
- 3: Caption := FloatToStr(Add([1, Ptr($1234, $5678)]));
- 4: Caption := FloatToStr(Add([1, ErrorGrp]));
- 5: Caption := FloatToStr(Add([1, TForm1]));
- 6: Caption := FloatToStr(Add([1, 'a']));
- end;
- end;
-
- end.
-